package cl.solidit.geomanagement.web.controller;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.hibernate.Hibernate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import cl.solidit.geomanagement.persistance.ComunaDAO;
import cl.solidit.geomanagement.persistance.PersonaDAO;
import cl.solidit.geomanagement.persistance.PropiedadDAO;
import cl.solidit.geomanagement.persistance.UserDAO;
import cl.solidit.geomanagement.persistance.VisitaDAO;
import cl.solidit.geomanagement.persistance.model.Comuna;
import cl.solidit.geomanagement.persistance.model.DisponibilidadVisita;
import cl.solidit.geomanagement.persistance.model.EstadoPropiedad;
import cl.solidit.geomanagement.persistance.model.Persona;
import cl.solidit.geomanagement.persistance.model.PreguntaFrecuente;
import cl.solidit.geomanagement.persistance.model.Propiedad;
import cl.solidit.geomanagement.persistance.model.TipoPropiedad;
import cl.solidit.geomanagement.persistance.model.Usuario;
import cl.solidit.geomanagement.web.service.RegisterPropertyService;

@Controller
public class RegisterPropiedadController {
	private static final Logger logger = LoggerFactory
			.getLogger(ConsultarPropiedadController.class);

	@Autowired
	private PropiedadDAO propiedadDAO;
	@Autowired
	private PersonaDAO personaDAO;
	@Autowired
	private UserDAO userDAO;
	@Autowired
	private VisitaDAO visitaDAO;
	@Autowired
	private ComunaDAO comunaDAO;
	@Autowired
	private RegisterPropertyService registerPropertyService;
	
	@Transactional
	@RequestMapping(value = "/registrar_propiedad", method = RequestMethod.GET)
	public ModelAndView accesoPagina() {

		List<Comuna> listaComunas = comunaDAO.traerComuna();
		List<Usuario> listaAgentes = userDAO.traerAgentes();
		List<TipoPropiedad> listaprop = propiedadDAO.traerTipoPropiedad();
		List<DisponibilidadVisita> listaDisp = propiedadDAO
				.traerDisponibilidad();
		List<PreguntaFrecuente> listaPregFrec = propiedadDAO
				.traerPreguntaFrecuente();
		Map<String, Object> map = new HashMap<String, Object>(); 

		Propiedad p = new Propiedad();
		
		// p.setAgente(new Usuario(null, null, null, new Persona()));
		p.setCaptador(new Persona());
		p.setPropietario(new Persona());
		p.setTipoPropiedad(new TipoPropiedad());
		p.setDisponibilidadVisita(new DisponibilidadVisita());
		for (Usuario usuario : listaAgentes) {
			Hibernate.initialize(usuario.getPersona());
		}
		map.put("listaprop", listaprop);
		map.put("listaDisp", listaDisp);
		map.put("listaPregFrec", listaPregFrec);
		map.put("listaAgentes", listaAgentes);
		map.put("listaComunas", listaComunas);
		map.put("command", p);
		return new ModelAndView("registrar_propiedad", map);

	}

	@Transactional
	@RequestMapping(value = "/registrar_propiedad", method = RequestMethod.POST)
	public ModelAndView addPropiedad(
			@ModelAttribute("command") Propiedad propiedad) {
		registerPropertyService.registrarPropiedad(propiedad);
		return propRegistrada(propiedad.getNumero());
	}
	
	
	@RequestMapping(value = "/propiedad_registrada", method = RequestMethod.GET)
	public ModelAndView propRegistrada(@PathVariable Long numero) {
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("numero", numero);
		return new ModelAndView("propiedad_registrada", map);
	}
	
	
	
	
}
